# scrapy多页下载案例一：
# 情况一（多个页面爬取的业务逻辑基本一致）

import scrapy
import datetime
from ..items.scrapy_item4dd import Item4DD  # 相对路径导入Item4DD

# 当当网案例
class DangdangOneSpider(scrapy.Spider):
    name = 'dangdang1'
    # 多页时必须调整 allowed_domains 的范围
    allowed_domains = ['category.dangdang.com']
    start_urls = ['http://category.dangdang.com/cp01.01.02.00.00.00.html']

    # 为不同该爬虫生成独立的日志文件（如 爬虫名_时间戳.log）
    # 爬虫类中通过 custom_settings 覆盖全局配置，且该变量名不可修改是scrapy框架的固定属性名：
    custom_settings = {
        'LOG_FILE': f"logs/{name}_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.log"  
    }

    base_urls = 'http://category.dangdang.com/pg'
    page = 1

    def parse(self, response):
        # items     定义数据结构
        # piplines  下载数据
        print("当当网爬取成功！")

        # xpath
        li_list = response.xpath('//ul[@id="component_59"]//li')

        for li in li_list:
            title = li.xpath('.//a[@class="pic"]/@title').extract_first() 
            img = li.xpath('.//a[@class="pic"]/img/@data-original').extract_first()

            if img:
                img = img
            else:
                img = li.xpath('.//a[@class="pic"]/img/@src').extract()
 
            price = li.xpath('.//p[@class="price"]/span[@class="search_now_price"]/text()').extract_first()
            #print(title[i].extract(),img[i].extract(),price[i].extract())
            book = Item4DD(img=img,title=title,price=price)
            # 在这里，yield可以实现获取一个book就将book交给pipelines即管道
            yield book

        # 多页爬取
        # 每一页的爬取的业务逻辑都是一样的，所以我们只需要将执行的那个页面的请求再次调用parse方法即可
        # http://category.dangdang.com/cp02.01.02.00.00.00.html
        if self.page < 4:
        # if self.page < 100:
            self.page = self.page + 1
            url = self.base_urls + str(self.page) + '-cp01.01.02.00.00.00.html'
            print(url)
            # 怎么调用parse方法？
            # scrapy.Request就是scrapy的get请求
            # url就是请求地址，callback就是要调用的函数
            yield scrapy.Request(url=url,callback=self.parse)